iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
0
自我挑戰組

Python 30天學習日誌系列 第 12

Day12-程式錯誤和例外處理

  • 分享至 

  • xImage
  •  

在要開始進入函式跟一些深入的程式介紹時,我想先談談程式錯誤的部分。畢竟未來在撰寫大量程式碼時,一定有機會發生錯誤,然後還搞不懂問題出在哪,所以才有了"例外處理"來幫助我們。那麼越想要程式正常執行就要越清楚問題點在哪,以下就開始一一介紹吧~

程式錯誤類型

程式的錯誤可以分成三種:

1.語法錯誤

顧名思義,這種錯誤就是程式碼不符合程式語言的語法。例如指令單字拼錯、大小寫不對,或是格式不對,都是屬於語法錯誤。其實這種錯誤最容易發現,一般在初步偵錯工具時就會出現紅紅的讓你改正,所以不必大費周章花時間在處理這方面的錯誤。

2.邏輯錯誤

如果程式可以執行,語法上看起來也沒問題,但獲得的結果卻是錯誤的,就是發生邏輯錯誤。例如寫錯變數名稱、將值錯誤地指定到別的地方,或是百分比輸出沒乘上100等。講直白點就是自己邏輯上想錯了,還是哪裡忘記加東西,通常細心一點慢慢觀察就行。

3.執行錯誤

當程式執行到一半時,被強制結束,無法執行完畢,就是發生執行錯誤。例如除數為0、使用者非法輸入、要開啟的檔案已不存在等。這種錯誤,在Python中會歸類在「例外」(Exceptions),而等等要講的例外處理也就是針對這種錯誤。

例外處理

執行錯誤通常不太容易被發現,而且通常在沒有其他語法錯誤的情況下發生的,所以才需要例外處裡來輔助設計者。例外處理是一種特殊的語法格式,由try和except這兩個主要指令組成,再加上兩個選擇性的else和finally指令。以下是它的完整語法,通常只要有主要指令就行了,還請搭配流程圖一起看:

try:
    #想要的程式碼
    ...
except(例外錯誤類型1, 例外錯誤類型2,...) as 例外物件:
    #發生例外錯誤類型1、2時,要執行的程式碼
    
#還可以在繼續增加except指令


else:
    #try指令的程式順利執行完畢,沒發生錯誤時執行
    ...
finally:
    #不管有沒有發生錯誤,最後都會執行
    ...

例外處理流程圖:
https://ithelp.ithome.com.tw/upload/images/20181027/201120785x6QgvtFqS.png


那麼除了瞭解它的語法格式之外,還要知道各種「例外錯誤類型」的使用時機。下面先放上書中整理的圖:
https://ithelp.ithome.com.tw/upload/images/20181027/20112078cf8P6dZ7D4.png
這裡也就不一一說明其功用了,因為這些通常是有需要才會去用,平時根本記不起所有例外類型/images/emoticon/emoticon06.gif當然你大可以用Exception類型去抓所有非系統運作的錯誤,不過這樣就會成為很懶惰的程式人員。程式就是要盡量明確地指定要處理哪一種例外錯誤,如此才能幫助自己學習,讓整個程式執行下來會比較完整。以下就來舉個我們常用的例子吧:

while True:
    try:
        age = int(input('請輸入年齡:'))
        if age<=0:
            print('有誰年齡是負的!好好打!')
            continue
    except ValueError:                     #抓非整數的時候
        print('打個數字有很難嗎??')
    except KeyboardInterrupt:              #抓按下Crtl+C的時候
        print('為什麼你要按複製?懶?')    
    else:
        if age<30:
            print('你的年齡是%d歲,很年輕喔~'%(age))
        elif 30<=age<=90:
            print('你的年齡是%d歲,要把握生命每一刻喔~'%(age))
        else:
            print('你的年齡是%d歲,很長壽喔~要繼續加油!'%(age))       
        break

執行結果

請輸入年齡:hello
打個數字有很難嗎??

請輸入年齡:好兇QQ
打個數字有很難嗎??

請輸入年齡:-123
有誰年齡是負的!好好打!

請輸入年齡:
為什麼你要按複製?懶?

請輸入年齡:20
你的年齡是20歲,很年輕喔~

好啦大致上先這樣,明天來跟函式玩~/images/emoticon/emoticon56.gif

參考資料

  • 書名-輕鬆學Python3 /孫宏明-編著
  • 書名-大數據起步從Python開始 /吳萍-編著

圖片來源

  • 書名-輕鬆學Python3 /孫宏明-編著

上一篇
Day11-集合 Set
下一篇
Day13-函式
系列文
Python 30天學習日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言